#ifndef MEREUI_HPP
#define MEREUI_HPP

#include <QtGui/QWidget>
#include <QtCore/QHash>
#include <QtCore/QList>
#include <QtCore/QString>

class QLayout;
class QGraphicsScene;
class VueGraphique;
class QResizeEvent;

/** Classe servant de base aux différentes classes GUI.
 * Cette classe contient un conteneur accueillant les widgets (indexé
 * par un nom) et un conteneur de layouts.
 *
 * @author Johan "Solo" Luisier
 * @date Novembre 2011
 */
class MereUI : public QWidget
{
    Q_OBJECT
public:
  /** Constructeur
   * Initialise les membres et affecte le parent.
   *
   * @param parent pointeur sur le parent du widget.
   */
  MereUI( QWidget* parent );
  /** Destructeur
   * Le destructeur doit libérer la mémoire allouée aux layouts.
   */
  virtual ~MereUI();
protected:
  /** Conteneur des widgets enfants.
   *
   */
  QHash< QString, QObject* > Composants;
  /** Conteneur des layouts utilisés.
   *
   */
  QList< QLayout* > Agencements;
  /**
   * Pointeur sur la scène utilisée.
   */
  QGraphicsScene * Scene;
  /**
   * Pointeur sur le widget de visualisation.
   */
  VueGraphique * Visualisation;
protected slots:
  void echelleAffichage(QResizeEvent * event);
signals:
  /** Est émis lors du changement de taille de la fenêtre.
   *
   * @param echelle rapport d'échelle minimal entre la nouvelle taille et l'ancienne.
   */
  void echelleChangee( double echelle );
};


#endif // MEREUI_HPP
